package com.zhongwang.mms.module.purchase.dao;/**
 * 项目名称（软件名称）：忠旺机械物资管理系统(mms)
 * 研发设计单位：忠旺机械设备制造有限公司机械设计院智能控制设计科设计与研发。
 * 版权所有：忠旺机械设备制造有限公司
 * 注：本项目的一切技术专利，使用规范归解释权由忠旺机械设备制造有限公司所有。
 * 软件版本：Ver 1.0.0
 * 文件路径：com.zhongwang.mms.module.purchase.dao
 * 创建时间：2020年04月11日 16时55分
 **/

import com.zhongwang.mms.gen.entity.*;
import com.zhongwang.mms.module.overview.model.statisticalReport.StatisticsOfSteelInStockDataModel;
import com.zhongwang.mms.module.purchase.model.*;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @InterfaceName： PurChangeDao
 * @Description：
 * @Author： 徐一贺
 * @Date： 2020/4/11 16:55
 * @Version： V1.0
 **/
@Repository
public interface PurChangeDao {
    /**
     *@FunctionName: findChangePlanList
     *@Description: 获取串料列表
     *@Author: 徐一贺
     *@CreateDate: 2020/4/16 12:44
     *@Phone: 18241927380
     *@Version: 1.0.0
     */
    List<ChangeModel> findChangePlanList(ChangeModel queryModel);

    /**
     *@FunctionName: getBReportPlanPrimaryKey
     *@Description: 根据主键获取计划信息
     *@Author: 徐一贺
     *@CreateDate: 2020/4/16 12:45
     *@Phone: 18241927380
     *@Version: 1.0.0
     */
    BReportPlan getBReportPlanPrimaryKey(Integer ceoRppId);

    /**
     *@FunctionName: getInventoryPrimaryKey
     *@Description: 根据主键获取库存信息
     *@Author: 徐一贺
     *@CreateDate: 2020/4/16 13:08
     *@Phone: 18241927380
     *@Version: 1.0.0
     */
    PInventory getInventoryPrimaryKey(Integer ceoNeedItyId);
    /**
     *@FunctionName: findLastCCOrderCode
     *@Description: 获取最后编码
     *@Author: 徐一贺
     *@CreateDate: 2020/4/16 13:08
     *@Phone: 18241927380
     *@Version: 1.0.0
     */
    String findLastCCOrderCode();

    /**
     *@FunctionName: insertSelective
     *@Description: 选择插入数据
     *@Author: 徐一贺
     *@CreateDate: 2020/4/16 14:15
     *@Phone: 18241927380
     *@Param: pChangeOrder 插入的数据
     *@Version: 1.0.0
     */
    void insertSelective(PChangeOrder pChangeOrder);

    PChangeOrder getPChangeOrderByRppId(Integer ceoRppId);

    void uppdateSelective(PChangeOrder pChangeOrder);
    void uppdateSelectiveNoNeedItyId(PChangeOrder pChangeOrder);



    /**
     *@FunctionName: getPInventory
     *@Description: 根据需求的库存信息主键查找库存信息
     *@Author: 徐一贺
     *@CreateDate: 2020/4/18 10:09
     *@Phone: 18241927380
     *@Param: [ceoUseItyId] 需求的库存信息主键
     *@Return: [pInventory] 查找到了库存信息
     *@Version: 1.0.0
     */
    PInventory findInventoryByParam(Integer ceoUseItyId);

    /**
     *@FunctionName: getTProjectByProCode
     *@Description: 根据项目号获取本系统项目信息
     *@Author: 徐一贺
     *@CreateDate: 2020/4/18 10:28
     *@Phone: 18241927380
     *@Param: [ityProCode] 项目号
     *@Return: [TProject] 本系统项目信息
     *@Version: 1.0.0
     */
    TProject getTProjectByProCode(String ityProCode);

    /**
     *@FunctionName: findVWProjectByLikeCode
     *@Description: 根据项目号模糊查询获取看板系统项目信息与本地系统项目状态列表
     *@Author: 徐一贺
     *@CreateDate: 2020/4/18 12:53
     *@Phone: 18241927380
     *@Param: [param] 包含项目号实体类
     *@Return: [List<VWProject>] 项目看板系统列表信息
     *@Version: 1.0.0
     */
    List<VWProject> findVWProjectByLikeCode(VWProject param);

    /**
     *@FunctionName: findVWProjectByCode
     *@Description: 根据项目号查询看板系统中是否包含此项目号
     *@Author: 徐一贺
     *@CreateDate: 2020/4/18 12:53
     *@Phone: 18241927380
     *@Param: [param] 包含项目号实体类
     *@Return: [VWProject] 根据项目号查询看板系统中是否包含此项目号
     *@Version: 1.0.0
     */
    VWProject findVWProjectByCode(VWProject param);


    /**
     *@FunctionName: findChangeOrderListByQuery
     *@Description: 根据条件号查询串料标记执行表列表数据
     *@Author: 徐一贺
     *@CreateDate: 2020/4/20 14:54
     *@Phone: 18241927380
     *@Param: [queryModel] 查询条件
     *@Return: [List<PChangeOrderModel>] 串料单标记列表
     *@Version: 1.0.0
     */
    List<ChangeModel> findChangeOrderListByQuery(ChangeOrderQueryModel queryModel);
    /**
     *@FunctionName: findChangeOrderExecListByQuery
     *@Description: 获取串料执行列表
     *@Author: 徐一贺
     *@CreateDate: 2020/4/21 19:43
     *@Phone: 18241927380
     *@Param: [queryModel] 检索参数
     *@Return: [List<ChangeModel>] 串料执行列表
     *@Version: 1.0.0
     */
    List<ChangeModel> findChangeOrderExecListByQuery(ChangeOrderQueryModel queryModel);

    /**
     *@FunctionName: updatePChangeOrderCeoAppyStatusByCeoId
     *@Description: 根据主键修改申请状态
     *@Author: 徐一贺
     *@CreateDate: 2020/4/21 12:45
     *@Phone: 18241927380
     *@Param: [param] 主键与申请状态载体
     *@Version: 1.0.0
     */
    void updatePChangeOrderCeoAppyStatusByCeoId(PChangeOrderModel param);

    /**
     *@FunctionName: findPChangeOrderByCeoId
     *@Description: 根据主键获取申请列表
     *@Author: 徐一贺
     *@CreateDate: 2020/4/21 20:33
     *@Phone: 18241927380
     *@Param: [ceoIds] 主键们
     *@Return: [List<PChangeOrderModel>] 申请列表
     *@Version: 1.0.0
     */
    List<PChangeOrderModel> findPChangeOrderByCeoId(String ceoIds);

    ChangeModel  getPChangeOrderByCeoId(String ceoIds);
    List<ChangeModel>  getPChangeOrderByCeoIds(String ceoIds);

    void uppdateBReportPlanRppIsFlagByPrimaryKey(BReportPlan bReportPlan);
    /**
     *@FunctionName: deletePChangeOrderModelByPrimaryKey
     *@Description: 根据主键删除串料单
     *@Author: 徐一贺
     *@CreateDate: 2020/5/13 18:23
     *@Phone: 18241927380
     *@Param: [param.ceoId] 主键
     *@Return:
     *@Version: 1.0.0
     */
    void deletePChangeOrderModelByPrimaryKey(PChangeOrderModel param);

    /**
     *@FunctionName: findPChangeOrderListSelective
     *@Description: 根据选择性的条件获取串料单列表
     *@Author: 徐一贺
     *@CreateDate: 2020/5/13 19:13
     *@Phone: 18241927380
     *@Param: [getListParamModel] 选择性的条件
     *@Return: [List<PChangeOrderModel>] 取串料单列表
     *@Version: 1.0.0
     */
    List<PChangeOrderModel> findPChangeOrderListSelective(PChangeOrderModel getListParamModel);

    /**
     *@FunctionName: getPChangeOrderByPrimaryKey
     *@Description: 获取串料实体类
     *@DesignIdea: 根据主键获取串料实体类
     *@Author: 徐一贺
     *@CreateDate: 2020/5/22 20:29
     *@Phone: 18241927380
     *@Param: [ceoId] 主键
     *@Return: [PChangeOrderModel] 串料实体类
     *@Throw: 无异常抛出
     *@Version: v 1.0.0
     */
    PChangeOrderModel getPChangeOrderByPrimaryKey(Integer ceoId);
    /**
     *@FunctionName: findPInventoryChangeOrderList
     *@Description: 查看该库存的串料信息，来自于哪个物料
     *@Author: 徐一贺
     *@CreateDate: 2020/6/13 15:11
     *@Phone: 18241927380
     *@Param: []
     *@Return: com.zhongwang.mms.common.JsonResult
     *@Throw:
     *@Version: v 1.0.0
     */
    List<PChangeOrderModel> findPInventoryChangeOrderList(PChangeOrderModel param);
    /**
     *@FunctionName: exportPurInvExcel
     *@Description: 导出所有串料模板
     *@DesignIdea:
     *@Author: 徐一贺
     *@CreateDate: 2020/6/13 15:49
     *@Phone: 18241927380
     *@Param: [response, param]
     *@Return: void
     *@Throw:
     *@Version: v1.0.0
     */
    List<PChangeOrderExcelModel> findPChangeOrderExcelListSelective(PurInvQueryModel param);
    /**
     *@FunctionName: insertErrorLog
     *@Description: 插入错误信息
     *@DesignIdea: 插入错误信息
     *@Author: 徐一贺
     *@CreateDate: 2020/6/16 8:49
     *@Phone: 18241927380
     *@Param: pChangeImportExportLogModel 错误信息
     *@Return:
     *@Throw:
     *@Version: v 1.0.0
     */
    void insertErrorLog(PChangeImportExportLogModel pChangeImportExportLogModel);
    /**
     *@FunctionName: PChangeImportExportLogModel
     *@Description: 导出15天内错误的串料标记信息
     *@DesignIdea: 导出15天内错误的串料标记信息
     *@Author: 徐一贺
     *@CreateDate: 2020/6/16 9:18
     *@Phone: 18241927380
     *@Param: [userId] 申请者主键
     *@Return:
     *@Throw:
     *@Version: v 1.0.0
     */
    List<PChangeImportExportLogModel> findPChangeImportExportLogModellListSelective(Integer userId);
    /**
     *@FunctionName: createPinventoryTempTable
     *@Description: 将查询结果放到临时表中
     *@DesignIdea: 请填写设计思想
     *@Author: 徐一贺
     *@CreateDate: 2020/6/19 9:14
     *@Phone: 18241927380
     *@Param: [param] 查询条件
     *@Return:
     *@Throw:
     *@Version: v 1.0.0
     */
    void createPinventoryTempTable(PurInvQueryModel param);
    /**
     *@FunctionName: getTempTableDataCount
     *@Description: 获取临时表数据量
     *@DesignIdea: 获取临时表数据量
     *@Author: 徐一贺
     *@CreateDate: 2020/6/19 9:14
     *@Phone: 18241927380
     *@Param: [param] 查询条件
     *@Return:
     *@Throw:
     *@Version: v 1.0.0
     */
    Integer getTempTableDataCount(PurInvQueryModel param);
    /**
     *@FunctionName: selectPinventoryTempTableByParam
     *@Description: 根据参数分页查询临时表数据
     *@DesignIdea: 根据参数分页查询临时表数据
     *@Author: 徐一贺
     *@CreateDate: 2020/6/19 9:14
     *@Phone: 18241927380
     *@Param: [param] 查询条件
     *@Return:
     *@Throw:
     *@Version: v 1.0.0
     */
    List<PChangeOrderOutExcelModel> selectPinventoryTempTableByParam(PurInvQueryModel param);
    /**
     *@FunctionName: dropPinventoryTempTableByTableName
     *@Description: 删除临时表
     *@DesignIdea: 删除临时表
     *@Author: 徐一贺
     *@CreateDate: 2020/6/19 9:24
     *@Phone: 18241927380
     *@Param: [tempTableName] 临时表名
     *@Return:
     *@Throw:
     *@Version: v 1.0.0
     */
    void dropPinventoryTempTableByTableName(String tempTableName);
    /**
     *@FunctionName: getChangeCountByCeoUseItyId
     *@Description: 获取已执行的串料数量
     *@DesignIdea: 请填写设计思想
     *@Author: 徐一贺
     *@CreateDate: 2020/6/22 12:54
     *@Phone: 18241927380
     *@Param:
     *@Return:
     *@Throw:
     *@Version: v 1.0.0
     */
    Integer getChangeCountByCeoUseItyId(Integer ceoUseItyId);
    /**
     *@FunctionName: createErrorLogTempTable
     *@Description: 创建错误数据临时表
     *@DesignIdea: 请填写设计思想
     *@Author: 徐一贺
     *@CreateDate: 2020/6/22 15:38
     *@Phone: 18241927380
     *@Param:
     *@Return:
     *@Throw:
     *@Version: v 1.0.0
     */
    void createErrorLogTempTable(PChangeImportExportLogModel param);
    /**
     *@FunctionName: getErrorLogTempTableDataCount
     *@Description: 获取临时表数据量
     *@DesignIdea: 获取临时表数据量
     *@Author: 徐一贺
     *@CreateDate: 2020年6月22日15:41:17
     *@Phone: 18241927380
     *@Param: [param] 查询条件
     *@Return:
     *@Throw:
     *@Version: v 1.0.0
     */
    Integer getErrorLogTempTableDataCount(PChangeImportExportLogModel param);
    /**
     *@FunctionName: dropErrorLogTempTable
     *@Description: 删除临时表数据
     *@DesignIdea: 请填写设计思想
     *@Author: 徐一贺
     *@CreateDate: 2020/6/22 15:42
     *@Phone: 18241927380
     *@Param:
     *@Return:
     *@Throw:
     *@Version:
     */
    void dropErrorLogTempTable(String tempTableName);



    /**
     *@FunctionName: selectErrorLogTempTableByParam
     *@Description: 分页获取错误数据 单价和金额可见
     *@DesignIdea: 分页获取错误数据
     *@Author: 徐一贺
     *@CreateDate: 2020/6/22 15:57
     *@Phone: 18241927380
     *@Param:
     *@Return:
     *@Throw:
     *@Version:
     */
    List<PChangeImportExportLogModel> selectErrorLogTempTableByParam(PChangeImportExportLogModel param);

    /**
     *@FunctionName: getChangeCountByCeoNeedItyId
     *@Description: 根据需求ID获取串料信息
     *@DesignIdea: 根据需求ID获取执行后的串料信息
     *@Author: 徐一贺
     *@CreateDate: 2020/6/29 10:41
     *@Phone: 18241927380
     *@Param:
     *@Return:
     *@Throw:
     *@Version: v 1.0.0
     */
    PChangeOrderModel getChangeCountByCeoNeedItyId(Integer ceoNeedItyId);
    PChangeOrderModel getChangeUseOrderInvCount(Integer ceoUseItyId);
    /**
     *@FunctionName: getChangeCountByCeoUsetyId
     *@Description: 根据需求ID获取串料信息
     *@DesignIdea: 根据需求ID获取执行后的串料信息
     *@Author: 徐一贺
     *@CreateDate: 2020/6/29 10:41
     *@Phone: 18241927380
     *@Param:
     *@Return:
     *@Throw:
     *@Version: v 1.0.0
     */
    PChangeOrderModel getChangeCountByCeoUsetyId(Integer ceoNeedItyId);

    /**
     *@FunctionName: findPChangeOrderListByCeoUseItyId
     *@Description: 获取被串的并执行的出库的记录信息
     *@DesignIdea: 获取被串的并执行的出库的记录信息
     *@Author: 徐一贺
     *@CreateDate: 2020/6/29 15:00
     *@Phone: 18241927380
     *@Param:
     *@Return:
     *@Throw:
     *@Version: v 1.0.0
     */
    List<PChangeOrderModel> findPChangeOrderListByCeoUseItyId(Integer ceoUseItyId);

    void updatePChangeOrderCeoAppyStatusByPk(PChangeOrderModel pChangeOrderModel);

    /**
     *@FunctionName: uppdateReject
     *@Description: 撤销
     *@DesignIdea: 撤销
     *@Author: 徐一贺
     *@CreateDate: 2020/6/29 15:00
     *@Phone: 18241927380
     *@Param:
     *@Return:
     *@Throw:
     *@Version: v 1.0.0
     */
    void uppdateReject(PChangeOrderModel pChangeOrderModel);

    /**
     * getTCostByCode
     * 通过项目号获取成本中心实体类
     * @param code
     * @return
     */
    TCost getTCostByCode(String code);

    List<PChangeOrderModel> findPChangeOrderListByCeoNeedItyId(Integer ceoNeedItyId);

    /**
     * 获取被挪用的申请单，状态为已出库和已执行的
     * @param ityId
     * @return
     */
    List<PChangeOrder> findPChangeOrderListByCeoUseItyIdAndCeoApplyStatus(Integer ityId);

    /**
     * 获取月消耗暂缓项目库存明细
     * @param param 查询条件 year 年 month 月
     * @return
     */
    List<ChangeModel> findMaterialInStockInfoData(StatisticsOfSteelInStockDataModel param);
    /**
     * 月消耗库房库存明细及金额明细
     * @param param 查询条件 year 年 month 月
     * @return
     */
    List<PInventoryProjectMarkModel> findMonthlyConsumptionWarehouseInventoryDetailsAndAmountInfo(StatisticsOfSteelInStockDataModel param);
    /**
     * 取消指定标识
     * @param param 计划
     */
    void updateBReportPlanRppIsFlagPrimaryKey(BReportPlan param);

    /**
     * 更新串料单价
     * @param pChangeOrderModel
     */
    void updateCeoPrice(PChangeOrderModel pChangeOrderModel);
}
